var express = require('express')
var path = require('path')
var app = express()
/* 总结
    中间件的概念：
        中间件就是方法
        先后顺序很重要，express会根据所写的中间件顺序生成中间件列表，当请求进来之后，
        依据请求路径，依次在中间件中从第一个开始从上到下逐个寻找匹配到的，依次执行
        next()表示继续执行下一个匹配的中间件，若匹配不到洗衣歌中间件，则express会respond cannot GET 路径 或者 Cannot POST 路径
        app.use(function(){}),任意进来的路径都能匹配到这个，其表示匹配到所有以'/'开头路径。挖能匹配
    补充：同一个请求所经过的中间件的req和resp都是相同的
         app.use('/a') 表示匹配到以/a开头的路径，而不是路径为/a的请求
         app.get和app.post匹配的路径是精确匹配 

    express的中间件种类：
    1、应用程序级别中间件 app.use
    2、路由级别中间件  app.get、app.post、app.put...
    3、第三方中间件 body-parser、cookie-parser...,这些中间件要写在最上面，而且其内部会自动调用next()
    4、错误处理中间件，一定要有4个参数app.use(function(err,req,resp,next){})，怎么使用error中间件，在错误的地方使用next(err),传递参数err，会进入带有4个参数的应用级别中间件
        配置404中间件，一般写在最后面，因为前面没有匹配到的就会在最后匹配到这个app.use(function(req,resp){})
    5、express内置中间件 express.static
                                 
    express
*/
app.use(express.static(path.join(__dirname+'/public')))
app.use(function(req,resp,next){
    console.log('/ 匹配以/开头的路径，万能中间件都会匹配到，先后顺序很重要')
    next()
})

/* 以/a开头的进入这个中间件 */
app.get('/a',function(req,resp,next){
    console.log(req.url)
    next()
})

app.get('/a',function(req,resp,next){
    console.log(2)
    resp.send('aaaaa')
})

app.listen(3000,function(){console.log('server running on 3000')})